From 0ac8059c91c0f3ecec14f16e46d8457ff82d1b4b Mon Sep 17 00:00:00 2001 From: "cl349@freefall.cl.cam.ac.uk" Date: Tue, 3 Aug 2004 18:07:13 +0000 Subject: [PATCH] bitkeeper revision 1.1131.1.2 (410fd451mjk_zz4-gJBfZHdAHnFx8A) Make page_to_phys return machine addresses. Fixes s/g-merging for block devices. --- linux-2.6.7-xen-sparse/arch/xen/i386/mm/pgtable.c | 2 +- linux-2.6.7-xen-sparse/drivers/xen/blkfront/blkfront.c | 3 +-- linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/dma-mapping.h | 4 ++-- linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/io.h | 4 ++-- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/linux-2.6.7-xen-sparse/arch/xen/i386/mm/pgtable.c b/linux-2.6.7-xen-sparse/arch/xen/i386/mm/pgtable.c index be0d311556..cbab491f2e 100644 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/mm/pgtable.c +++ b/linux-2.6.7-xen-sparse/arch/xen/i386/mm/pgtable.c @@ -195,7 +195,7 @@ struct page *pte_alloc_one(struct mm_struct *mm, unsigned long address) #endif if (pte) { clear_highpage(pte); - __make_page_readonly(phys_to_virt(page_to_phys(pte))); + __make_page_readonly(phys_to_virt(page_to_pseudophys(pte))); /* XXXcl highmem */ } return pte; diff --git a/linux-2.6.7-xen-sparse/drivers/xen/blkfront/blkfront.c b/linux-2.6.7-xen-sparse/drivers/xen/blkfront/blkfront.c index db9c6b4d62..b0bb934b35 100644 --- a/linux-2.6.7-xen-sparse/drivers/xen/blkfront/blkfront.c +++ b/linux-2.6.7-xen-sparse/drivers/xen/blkfront/blkfront.c @@ -225,8 +225,7 @@ static int blkif_queue_request(struct request *req) ring_req->nr_segments = 0; rq_for_each_bio(bio, req) { bio_for_each_segment(bvec, bio, idx) { - buffer_ma = - phys_to_machine(page_to_phys(bvec->bv_page)); + buffer_ma = page_to_phys(bvec->bv_page); if (unlikely((buffer_ma & ((1<<9)-1)) != 0)) BUG(); diff --git a/linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/dma-mapping.h b/linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/dma-mapping.h index 9d2f2cedd6..0ba88a13e5 100644 --- a/linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/dma-mapping.h +++ b/linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/dma-mapping.h @@ -41,7 +41,7 @@ dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, for (i = 0; i < nents; i++ ) { BUG_ON(!sg[i].page); - sg[i].dma_address = page_to_machine(sg[i].page) + sg[i].offset; + sg[i].dma_address = page_to_phys(sg[i].page) + sg[i].offset; } flush_write_buffers(); @@ -53,7 +53,7 @@ dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction direction) { BUG_ON(direction == DMA_NONE); - return page_to_machine(page) + offset; + return page_to_phys(page) + offset; } static inline void diff --git a/linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/io.h b/linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/io.h index 6d4c9e0f2e..8701bcc5ce 100644 --- a/linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/io.h +++ b/linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/io.h @@ -85,8 +85,8 @@ static inline void * phys_to_virt(unsigned long address) /* * Change "struct page" to physical address. */ -#define page_to_phys(page) ((dma_addr_t)page_to_pfn(page) << PAGE_SHIFT) -#define page_to_machine(page) (phys_to_machine(page_to_phys(page))) +#define page_to_pseudophys(page) ((dma_addr_t)page_to_pfn(page) << PAGE_SHIFT) +#define page_to_phys(page) (phys_to_machine(page_to_pseudophys(page))) extern void * __ioremap(unsigned long offset, unsigned long size, unsigned long flags); -- 2.30.2